// ESLint 9+ 扁平配置 - Vue3 + TypeScript 项目
import js from '@eslint/js'
import tsPlugin from '@typescript-eslint/eslint-plugin'
import tsParser from '@typescript-eslint/parser'
import vuePlugin from 'eslint-plugin-vue'
import vueParser from 'vue-eslint-parser'
import prettierConfig from 'eslint-config-prettier'

export default [
  // 忽略配置
  {
    ignores: [
      'node_modules/',
      'dist/',
      'dist-test/',
      'coverage/',
      '*.d.ts',
      'mobile/**',
      'scripts/**',
      'public/static/**',
      '**/*.backup.*',
      '**/*.config.backup.*',
      'vite.config.ts',
      'cypress.config.ts',
      'vitest.config.ts',
    ],
  },

  // JavaScript 文件基础配置
  {
    files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
    languageOptions: {
      ecmaVersion: 2022,
      sourceType: 'module',
      globals: {
        console: 'readonly',
        process: 'readonly',
        module: 'readonly',
        require: 'readonly',
        __dirname: 'readonly',
      },
    },
    rules: {
      'no-console': 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    },
  },

  // TypeScript 文件配置
  {
    files: ['**/*.ts', '**/*.tsx'],
    languageOptions: {
      parser: tsParser,
      parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
        project: false, // 不使用 TypeScript 项目引用，避免性能问题
      },
    },
    plugins: {
      '@typescript-eslint': tsPlugin,
    },
    rules: {
      ...tsPlugin.configs.recommended.rules,
      // 放宽 TypeScript 规则
      '@typescript-eslint/no-explicit-any': 'off',
      '@typescript-eslint/no-unused-vars': 'off',
      '@typescript-eslint/explicit-function-return-type': 'off',
      '@typescript-eslint/explicit-module-boundary-types': 'off',
      '@typescript-eslint/no-non-null-assertion': 'off',
      '@typescript-eslint/ban-ts-comment': 'off',
      '@typescript-eslint/no-empty-object-type': 'off', // 允许空对象类型 {}
      '@typescript-eslint/no-unsafe-function-type': 'off', // 允许 Function 类型
      'no-undef': 'off', // TypeScript 会处理
    },
  },

  // Vue 文件配置 - 使用 Vue3 推荐配置
  ...vuePlugin.configs['flat/recommended'],
  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: vueParser,
      parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
        parser: tsParser,
        extraFileExtensions: ['.vue'],
      },
      globals: {
        defineProps: 'readonly',
        defineEmits: 'readonly',
        defineExpose: 'readonly',
        withDefaults: 'readonly',
        console: 'readonly',
        process: 'readonly',
      },
    },
    plugins: {
      '@typescript-eslint': tsPlugin,
    },
    rules: {
      // 放宽 Vue 规则
      'vue/multi-word-component-names': 'off',
      'vue/no-v-html': 'off',
      'vue/require-default-prop': 'off',
      'vue/require-prop-types': 'off',
      'vue/no-unused-components': 'warn',
      'vue/max-attributes-per-line': 'off',
      'vue/html-self-closing': 'off',
      'vue/first-attribute-linebreak': 'off',
      'vue/html-closing-bracket-newline': 'off',
      'vue/html-indent': 'off',
      'vue/attributes-order': 'off',
      'vue/singleline-html-element-content-newline': 'off',
      'vue/multiline-html-element-content-newline': 'off',
      'vue/no-mutating-props': 'off', // 允许修改 props（项目使用 v-model）
      'vue/no-deprecated-v-on-native-modifier': 'off', // 允许 .native 修饰符（兼容性）
      'vue/no-required-prop-with-default': 'off', // 允许必需 prop 有默认值
      'vue/v-on-event-hyphenation': 'off', // 允许事件名不使用连字符
      'vue/attribute-hyphenation': 'off', // 允许属性名不使用连字符
      'vue/no-template-shadow': 'warn', // 降级为警告
      'vue/no-unused-vars': 'warn', // 降级为警告
      'vue/no-dupe-keys': 'error', // 保持错误级别
      'vue/no-ref-as-operand': 'error', // 保持错误级别
      // TypeScript in Vue
      '@typescript-eslint/no-explicit-any': 'off',
      '@typescript-eslint/no-unused-vars': 'off',
      '@typescript-eslint/no-empty-object-type': 'off',
      '@typescript-eslint/no-unsafe-function-type': 'off',
    },
  },

  // Prettier 配置（关闭与 Prettier 冲突的规则）
  prettierConfig,
]
